#include "shm.hpp"
#include "Fifo.hpp"

// 建立通信信道
// int main()
// {
//     Shm shm;
//     shm.Create();
//     sleep(3);
//     shm.Attach();
//     shm.VirtualAddr();
//     sleep(3);
//     shm.Destory();
//     return 0;
// }

// // 进程间通信(无同步机制)
// int main()
// {
//     Shm shm(pathname, projid, CREATER);
//     char * mem = (char*)shm.VirtualAddr(); // 起始虚拟地址

//     // 一旦共享内存建立映射, 通信双方直接能拿到虚拟地址,
//     // 访问该虚拟地址如同访问自己的堆空间一样，实现高效数据共享。

//     // 读取共享内存地址操作
//     while (true)
//     {
//         printf("%s\n", mem);
//         sleep(1);
//     }
//     return 0;
// }

// 进程间通信
int main()
{
    // 在server端先创建共享内存, 
    // 防止读取阻塞时, client端先以USER身份Get共享内存了(出错)
    Shm shm(pathname, projid, CREATER);
    // 创建管道
    Namedfifo fifo(PATH, FILENAME);
    // 文件操作
    FileOper readerfile(PATH, FILENAME);
    readerfile.OpenForRead(); 

    char *mem = (char *)shm.VirtualAddr(); // 起始虚拟地址

    // 读取共享内存地址操作
    while (true)
    {
        // 默认会阻塞, 直到写端写入
        if (readerfile.Wait()) 
        {
            printf("%s\n", mem);
            //sleep(1);
        }
        else
            break;
    }

    readerfile.Close();
    return 0;
}